//
// Created by xili on 2024/8/25 11:02.
// GO BIG OR GO HOME.
//
#include "leetcode.h"

class Solution {
public:
    int countPairs(vector<int> &nums) {
        int n = nums.size();
        int result = 0;

        // 遍历所有可能的数对
        for (int i = 0; i < n; ++i) {
            for (int j = i + 1; j < n; ++j) {
                if (areApproximatelyEqual(nums[i], nums[j])) {
                    ++result;
                }
            }
        }

        return result;
    }

private:
    bool areApproximatelyEqual(int x, int y) {
        string strX = to_string(x);
        string strY = to_string(y);

        // 直接相等
        if (strX == strY) return true;

        // 尝试交换 strX 和 strY 的所有可能两位数位
        return canSwapToEqual(strX, strY) || canSwapToEqual(strY, strX);
    }

    bool canSwapToEqual(string strX, string strY) {
        int len = strX.size();

        // 尝试交换 strX 的所有可能的两位数位
        for (int i = 0; i < len; ++i) {
            for (int j = i + 1; j < len; ++j) {
                swap(strX[i], strX[j]);

                // 去除前导0
                string newStrX = strX;
                while (newStrX.size() > 1 && newStrX[0] == '0') {
                    newStrX.erase(newStrX.begin());
                }

                if (newStrX == strY) return true;

                // 还原交换
                swap(strX[i], strX[j]);
            }
        }

        return false;
    }
};
